package learn.stream;

import java.util.stream.IntStream;

/**
 * Created By  醉美柳舞之众星捧月
 *
 * @author songx
 * @date 2018/12/19 22:35
 */
public class StreamDemo1 {
    public static void main(String[] args) {
        int[] nums = {1, 2, 3};
        // 外部迭代
        int sum = 0;
        for (int i : nums) {
            sum += i;
        }
        System.out.println("结果为：" + sum);

        //使用stream的内部迭代
        int sum1 = IntStream.of(nums).sum();
        System.out.println("结果为：" + sum1);


        // map就是中间操作(返回stream的操作)
        // sum 就是终止操作
        int sum2 = IntStream.of(nums).map(i -> i * 2).sum();
        System.out.println("结果为：" + sum2);

        // 正常求值 ( 会执行StreamDemo1 方法)
        int sum3 = IntStream.of(nums).map(StreamDemo1::doubleNum).sum();
        // 惰性求值 ( 这面的这一行代码,都不会执行的)
        IntStream intStream = IntStream.of(nums).map(StreamDemo1::doubleNum);
        System.out.println("惰性求值就是 终止操作 没有调用的情况下 , 中间操作不会执行！");
    }

    public static int doubleNum(int i) {
        System.out.println("执行了乘以2");
        return i * 2;
    }
}
